package com.cn.qtms.common.page;

import com.cn.qtms.util.BeanUtils;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.domain.Page;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@SuppressWarnings("AliLongLiteralsEndingWithLowercaseL")
@Getter
@Setter
/**
 * @author zhangyang
 */
public class PageRes<T> {
    private List<T> content;
    /**
     * 总页数
     */
    private int pageTotal;
    /**
     * 第几页
     */
    private int pageIndex;
    /**
     * 单页条数
     */
    private int pageSize;
    /**
     * 总条数
     */
    private Long total;

    public static <T> PageRes<T> toRes(Page<T> page) {
        PageRes<T> res = new PageRes<>();
        if (page != null && page.getSize() != 0) {
            res.setContent(page.getContent());
            res.setTotal(page.getTotalElements());
            res.setPageTotal(page.getTotalPages());
            //修复bug 第一页是0
            res.setPageIndex(page.getNumber() + 1);
            res.setPageSize(page.getSize());
        } else {
            getDefaultStting(res);
        }
        return res;
    }

    /**
     * 将map转换为可用分页的vo类
     * @param page
     * @param t
     * @param <T>
     * @return
     */
    public static <T> PageRes<T> toRes(Page<Map<String, Object>> page, T t) {
        PageRes<T> res = new PageRes<>();

        if (page != null && page.getSize() != 0) {
            final List<Map<String, Object>> content = page.getContent();
            BeanUtils<T> utils = new BeanUtils<>();
            res.setContent(utils.parseListToVo(content, t));
            res.setTotal(page.getTotalElements());
            res.setPageTotal(page.getTotalPages());
            //修复bug 第一页是0
            res.setPageIndex(page.getNumber() + 1);
            res.setPageSize(page.getSize());
        } else {
            getDefaultStting(res);
        }
        return res;
    }

    /**
     * 自定义content的page转换成vo类分页
     * @param page
     * @param t
     * @param list
     * @param <T>
     * @return
     */
    public static  <T> PageRes<T> toRes(Page<Map<String, Object>> page, T t,List<Map<String, Object>> list) {
        PageRes<T> res = new PageRes<>();

        if (page != null && page.getSize() != 0) {
            BeanUtils<T> utils = new BeanUtils<>();
            res.setContent(utils.parseListToVo(list, t));
            res.setTotal(page.getTotalElements());
            res.setPageTotal(page.getTotalPages());
            //修复bug 第一页是0
            res.setPageIndex(page.getNumber() + 1);
            res.setPageSize(page.getSize());
        } else {
            getDefaultStting(res);
        }
        return res;
    }

    private static void getDefaultStting(PageRes res) {
        res.setContent(new ArrayList<>());
        res.setTotal(0L);
        res.setPageTotal(0);
        res.setPageIndex(0);
        res.setPageSize(20);
    }
}
